package com.youdoneed.community.forum.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.youdoneed.community.forum.vo.updateUserInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.youdoneed.community.forum.entity.Forummessage;
import com.youdoneed.community.forum.vo.ForumReportVo;
import com.youdoneed.community.forum.vo.QueryMsgsVo;
@Mapper
public interface ForummessageMapper {
    int deleteByPrimaryKey(String forumMsgId);

    int insert(Forummessage record);

    int insertSelective(Forummessage record);

    Forummessage selectByPrimaryKey(String forumMsgId);
    
    /**
     * 根据帖子id获取帖子详情
     * @param forumMsgId
     * @return Forummessage
     * @author lid
     * @date 2017.6.30
     */
    Forummessage selectMessagesDetail(String forumMsgId);
    
    /**
     * 根据帖子内容搜索帖子
     * @param record
     * @return
     */
    List<Forummessage> searchMessageByContent(String content);

    int updateByPrimaryKeySelective(Forummessage record);

    /**
     * 用户修改个人信息时，把对应的帖子中的用户信息一起改掉
     * @param userId
     * @param nickName
     * @param userHeadUrl
     * @return
     */
    int updateUserInfo(updateUserInfoVo vo);
    
    /**
     * 更新点赞数据
     * @param record
     * @return int
     * @author lid
     * @date 2017.6.22
     */
    int updateLikesCount(String forumMsgId, int likesCount);
    
    /**
     * 更新评论数据
     * @param record
     * @return int
     * @author lid
     * @date 2017.6.22
     */
    int updateCommentCount(String forumMsgId, int commentCount);

    /**
     * 帖子评论数加1
     * @param msgId
     * @return
     */
    int addCommentCount(String msgId);

    /**
     * 修改推荐状态
     * @param forumMsgId
     * @param recommand
     * @return int
     * @author lid
     * @date 2017.10.12
     */
    int updateRecommandStatus(String forumMsgId, int recommand);

    /**
     * 更新分享数据
     * @param record
     * @return int
     * @author lid
     * @date 2017.7.20
     */
    int addShareCount(String forumMsgId);

    int updateByPrimaryKey(Forummessage record);
    
    List<Forummessage> selectByUserId(String userId);

    /**
     * @author lid
     * @param groupId
     * @return List<Forummessage>
     * @date 2017.7.15
     */
    List<Forummessage> selectByGroupId(String groupId);


    int updateById(String forumMsgId);

    /**
     * 逻辑删除分享帖
     * @param forumMsgId
     * @return
     */
    int deleteShareMsgsByLogic(String sourceId);


    //List<Forummessage> getReportMsg(@Param("name")String name,@Param("msgStruct")String msgStruct,@Param("createDateS")String createDateS,@Param("createDateE")String createDateE);
    
    List<Forummessage> getAllForummessageByPage(QueryMsgsVo vo);
    
    int countAllMsgs();

    int countTodayNewMsgs(Date deadTime);
    
    
    List<Forummessage> getForumMsg(@Param("msgType")String msgType,@Param("msgContent")String msgContent,@Param("createDateS")String createDateS,@Param("createDateE")String createDateE);
    
    /**
     * 通过标签id查找对应的帖子
     * @param labeId
     * @return List
     * @author lid
     * @date 2017.6.8
     */
    List<Forummessage> getMsgsBylabelId(String labelId);
    
    /**
     * 通过标签id查找对应的帖子
     * @param labeId
     * @return List
     * @author lid
     * @date 2017.6.8
     */
    List<Forummessage> getMsgsByTwolabelIds(String labelId1, String labeId2);
    
    /**
     * 通过标签id查找对应的帖子
     * @param labeId
     * @return List
     * @author lid
     * @date 2017.6.8
     */
    List<Forummessage> getMsgsByThreelabelIds(String labelId1, String labeId2, String labeId3);
    
    /**
     * @return List<Forummessage>
     * @author lid
     * @date 2017.6.9
     */
    List<ForumReportVo> queryAllReportForumMsg(String forumHandle);
    
    /**
     * 统计被举报帖子的数量
     * @author lixs
     * @return int
     */
    int countReportMsgs(String forumHandle);

    
    int addReportNumberByPrimaryKey(String forumMsgId);

    /**
     * 获取用户首页帖子的第三种形式
     * @param userId
     * @param beforeDeadtime
     * @return
     */
    List<Forummessage> getIndexPageMsgs(@Param("listMsgIds")List<String> listMsgIds);
    


    /**
     * 根据帖子类型获取关注用户的帖子（3D视频和酷视频）
     * @param userId
     * @param msgType
     * @param beforeDeadTime
     * @param number
     * @return
     */
    List<Forummessage> getAttentionUserMsgByType(@Param("listUserIds") List<String> listUserIds,
                                                 @Param("msgType") String msgType,
                                                 @Param("beforeDeadTime") Date beforeDeadTime,
                                                 @Param("number") Integer number);
    
    /**
     * 获取周边用户截止时间以后的帖子
     * @param userId
     * @param lastDeadtime
     * @return List<Forummessage>
     * @author lid
     * @date 2017.7.8
     */
    List<Forummessage> getNearByUserMsgsAfterDeadtime(Double minLongitude, Double maxLongitude,
            Double minLatitude, Double maxLatitude, Date lastDeadtime, Date nowTime);
    
   /**
    * 获取周边用户截止时间以前的帖子
    * @param minLongitude
    * @param maxLongitude
    * @param minLatitude
    * @param maxLatitude
    * @param beforeDeadTime
    * @author lid
    * @date 2017.7.8
    * @return List<Forummessage>
    */
    List<Forummessage> getNearByUserMsgsBeforeDeadtime(Double minLongitude, Double maxLongitude,
            Double minLatitude, Double maxLatitude, Date beforeDeadTime);

    /**
     * 获取周边用户截止时间以前的没有标签的帖子
     * @param minLongitude
     * @param maxLongitude
     * @param minLatitude
     * @param maxLatitude
     * @param beforeDeadTime
     * @author lid
     * @date 2017.7.8
     * @return List<Forummessage>
     */
    List<Forummessage> getNearByUserMsgsWithOutLabelsBeforeDeadtime(Double minLongitude, Double maxLongitude,
                                                                    Double minLatitude, Double maxLatitude, Date beforeDeadTime);

    /**
     * 获取周边用户截止时间以后的没有标签的帖子
     * @param minLongitude
     * @param maxLongitude
     * @param minLatitude
     * @param maxLatitude
     * @param beforeDeadTime
     * @author lid
     * @date 2017.8.16
     * @return List<Forummessage>
     */
    List<Forummessage> getNearByUserMsgsWithOutLabelsAfterDeadtime(Double minLongitude, Double maxLongitude,
                                                                    Double minLatitude, Double maxLatitude, Date afterDeadTime);

    /**
     * 根据标签获取周边用户截止时间以前的帖子
     * @param minLongitude
     * @param maxLongitude
     * @param minLatitude
     * @param maxLatitude
     * @param beforeDeadTime
     * @param forumMessageLabelId
     * @return
     * @author lid
     * @date 2017.7.15
     */
    List<Forummessage> getNearByUserMsgsBeforeDeadtimeByLabel(Double minLongitude, Double maxLongitude,
                                                              Double minLatitude, Double maxLatitude,
                                                              Date beforeDeadTime, String forumMessageLabelId);

    List<Forummessage> getNearByUserMsgsAfterDeadtimeByLabel(Double minLongitude, Double maxLongitude,
                                                              Double minLatitude, Double maxLatitude,
                                                              Date lastDeadTime, String forumMessageLabelId);

    /**
     * 获取群组截止时间以后的帖子
     * @param groupId
     * @param lastDeadtime
     * @return List<Forummessage>
     * @author lid
     * @date 2017.7.10
     */
    List<Forummessage> getGroupMsgsAfterDeadtime(String groupId, Date lastDeadtime , Date nowTime);
    
    /**
     * 获取群组截止时间以前的帖子
     * @param groupId
     * @param lastDeadtime
     * @return List<Forummessage>
     * @author lid
     * @date 2017.7.10
     */
    List<Forummessage> getGroupMsgsBeforeDeadtime(String groupId, Date beforeDeadtime);
    

    /**
     *  获取处于userId链表内的帖子
     * @return List<Forummessage>
     */
    List<Forummessage> getHomePageMsgsByUserList(@Param("userId") String userId,
                                                 @Param("notAttentioneduserIds") List<String> notAttentioneduserIds,
                                                 @Param("attentionedUserIds") List<String> attentionedUserIds,
                                                 @Param("msgIds") List<String> msgIds,
                                                 @Param("beforeDeadTime") Date beforeDeadTime,
                                                 @Param("lastDeadTime") Date lastDeadTime,
                                                 @Param("nowTime") Date nowTime);

    /**
     *  获取附近用户的帖子（关注区域）
     * @return List<Forummessage>
     */
    List<Forummessage> getNearByUserMsgs(@Param("listLabelIds") List<String> listLabelIds,
                                         @Param("listNearByUserIds") List<String> listNearByUserIds,
                                         @Param("msgIds") List<String> msgIds,
                                         @Param("beforeDeadTime") Date beforeDeadTime,
                                         @Param("lastDeadTime") Date lastDeadTime,
                                         @Param("nowTime") Date nowTime);



    /**
     * 统计我的帖子的点赞总数
     * @param userId
     * @return int
     * @author lid
     * @date 2017.7.11
     */
    int countLikePointsByUserId(String userId);

    /**
     * 获取我的点赞贴个数
     * @param userId
     * @param sourceId
     * @return
     * @author lid
     */
    Forummessage getLikePointMsgByUserIdAndSourceId(String userId, String sourceId);

    /**
     * 修改点赞贴的状态
     * @return
     * @author lid
     */
    int updateLikePointMsgStatus(String msgId, int msgDelete);

    /**
     * 删除点赞贴（逻辑删除）
     * @param soureceId
     * @return
     * @author lid
     */
    int deleteLikePointMsgs(String sourceId);

    /**
     * 恢复帖子
     * @param msgId
     * @return
     * @author lid
     */
    int regainForumMsgById(String forumMsgId);

    /**
     * 恢复点赞贴（逻辑恢复）
     * @param soureceId
     * @return
     * @author lid
     */
    int regainLikePointMsgs(String sourceId);

    /**
     * 物理删除点赞帖
     * @param sourceId
     * @return
     * @author lid
     */
    int deleteLikePointMsgsByUser(String sourceId);

    /**
     * 物理删除分享帖
     * @param sourceId
     * @return
     * @author lid
     */
    int deleteShareMsgsByUser(String sourceId);

    /**
     * 计算群组帖子个数
     * @param groupId
     * @return
     */
    int countGroupMsgs(String groupId);

    /**
     * 获取某帖子类型的推荐帖子（如3D、短视频等）
     * @param msgType
     * @return List<Forummessage>
     * @author lid
     * @date 2017.9.28
     */
    List<Forummessage> getRecommandMsgByType(String msgType, String userId);

    /**
     * 获取首页推荐的3D视频和酷视频列表
     * @param msgType
     * @param userId
     * @return List<Forummessage>
     * @author lid
     * @date 2017.11.7
     */
    List<Forummessage> getIndexRecommandMsgs(String msgType, String userId);

    /**
     * 获取首页推荐的单个3D视频和酷视频
     * @param msgType
     * @return
     * @author lid
     * @date 2017.11.7
     */
    List<Forummessage> getOneRecommandMsg(String msgType);

}